package pay

import (
	"context"
	"fmt"
	"time"
)

//新大陆国通的 对账文件和分账文件 接口定义
type ArgsReplyDownload struct {
	CustId string //结构号
	Date   string //日期 格式为 2016-01-02 15:14:05
	Path   string //下载的位置信息 可以动态配置
	Cid    string //地区信息
}

//生成对账文件名称
func (this *ArgsReplyDownload) Format() string {
	if this.Date != "" {
		return fmt.Sprintf("%s_%s.txt", this.CustId, this.Date)
	}
	nTime := time.Now()
	yesTime := nTime.AddDate(0, 0, -1)
	logDay := yesTime.Format("20060102")
	return fmt.Sprintf("%s_%s.txt", this.CustId, logDay)
}

//分账文件请求对象
type ArgsSplitaccount struct {
	CustId string //结构号
	Date   string //日期 格式为 2016-01-02 15:14:05
	Path   string //下载的位置信息 可以动态配置
	Cid    string //地区信息
}

//生成分账文件名称 机构号+日期+ACC 如：20210615 的对账文件为 6100000127-20210615ACC
func (this *ArgsSplitaccount) FormatFenzhang() string {
	if this.Date != "" {
		return fmt.Sprintf("%s_%sACC.txt", this.CustId, this.Date)
	}
	nTime := time.Now()
	yesTime := nTime.AddDate(0, 0, -1)
	logDay := yesTime.Format("20060102")
	return fmt.Sprintf("%s_%sACC.txt", this.CustId, logDay)
}

type ReplySplitaccountCount struct {
	SUM_COUNT int `json:"SUM_COUNT"` //总条数
}

//分账文件相关
type ReplySplitaccountDownload struct {
	ORDER_NO    string `json:"ORDER_NO"`    //平台订单号
	PAY_CHANNEL string `json:"PAY_CHANNEL"` //交易通道（1.支付宝 2.微信支付 9.银联小微 11银联刷卡）
	ORDER_TIME  string `json:"ORDER_TIME"`  //交易时间
	USTLDAT     string `json:"USTLDAT"`     //清算日期
	TXAMT       string `json:"TXAMT"`       //交易金额（分）
	FEE         string `json:"FEE"`         //手续费(分)
	NETR_AMT    string `json:"NETR_AMT"`    //实收金额（分）
	ACC_WAY     string `json:"ACC_WAY"`     //分账类型（1.整单分账 2.商品分账）
	CUST_ID     string `json:"CUST_ID"`     //交易商户号
	GOOD_NAME   string `json:"GOOD_NAME"`   //商品名称（当分账类型为2时才有值，分账类型为1时该字段为空字符串）
	ACC_CUST_ID string `json:"ACC_CUST_ID"` //分账商户号
	ACC_AMT_C   string `json:"ACC_AMT_C"`   //分账商户所分得金额（分）
}
type ReplyDuizhangSumCount struct {
	SUM_COUNT        string `json:"SUM_COUNT"`        //总正向交易笔数
	SUM_TXAMT        string `json:"SUM_TXAMT"`        //总正向交易金额（分）
	RE_SUM_COUNT     string `json:"RE_SUM_COUNT"`     //总退款笔数
	RE_SUM_OLD_TXAMT string `json:"RE_SUM_OLD_TXAMT"` //总退款金额（分）
	SUM_CUST_AMT     string `json:"SUM_CUST_AMT"`     //总商户出资（分）
	SUM_FEE          string `json:"SUM_FEE"`          //总手续费（分）
	SUM_OLD_TXAMT    string `json:"SUM_OLD_TXAMT"`    //
}
type ReplyDuizhan struct {
	JY_TXAMT     string `json:"JY_TXAMT"`     //实际交易金额（分）
	JY_TYPE      string `json:"JY_TYPE"`      //交易类型（正向交易1 反向交易2）
	JY_FEE       string `json:"JY_FEE"`       //实收手续费（分）
	JY_ORDER_NO  string `json:"JY_ORDER_NO"`  //平台订单号
	JY_FLOW_NO   string `json:"JY_FLOW_NO"`   //第三方订单号
	JY_OLD_TXAMT string `json:"JY_OLD_TXAMT"` //原交易金额（分）
	JY_DATE      string `json:"JY_DATE"`      // 交易清算日期
	JY_TIME      string `json:"JY_TIME"`      //交易完成时间
	DEVICE_NO    string `json:"DEVICE_NO"`    //设备编号
	CUST_AMT     string `json:"CUST_AMT"`     //商户出资（分）
	CUST_ID      string `json:"CUST_ID"`      //商户号
}

//分账结果
type ReplyFenzhangInfoInfo struct {
	ReplySplitaccountCount                              //嵌入 字段第一行信息
	Res                    []*ReplySplitaccountDownload `json:"res"` //读取的信息
}

//对账结果
type ReplyDuizhangInfo struct {
	ReplyDuizhangSumCount                 //对账第一行信息
	Res                   []*ReplyDuizhan `json:"res"` //对账结果信息
}

//对账文件下载接口
//下载ftp文件到本地服务器
type ReiationFileDownload interface {
	FileDownload(ctx context.Context, args *ArgsReplyDownload, reply *bool) error                 //对账文件下载
	SplitaccountDownload(ctx context.Context, args *ArgsSplitaccount, reply *bool) error          //分账文件下载
	FenzhangInfo(ctx context.Context, args *ArgsSplitaccount, reply *ReplyFenzhangInfoInfo) error //分账处理
	DuizhangInfo(ctx context.Context, args *ArgsReplyDownload, reply *ReplyDuizhangInfo) error
}
